package com.yxy.mapper;

import com.github.pagehelper.Page;
import com.yxy.pojo.dto.HotelPageQueryDTO;
import com.yxy.pojo.dto.HotelSpecsPageQueryDTO;
import com.yxy.pojo.entity.Hotel;
import com.yxy.pojo.entity.HotelSpecs;
import com.yxy.pojo.vo.HotelAdvancedPageQueryVO;
import com.yxy.pojo.vo.HotelPageQueryVO;
import com.yxy.pojo.vo.HotelSpecsPageQueryVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

@Mapper
public interface HotelMapper {
    /**
     * 分页查询
     * @param hotelPageQueryDTO
     * @return
     */
    Page<HotelPageQueryVO> pageQuery(HotelPageQueryDTO hotelPageQueryDTO);

    /**
     * 根据酒店名称查询
     * @param name
     * @return
     */
    @Select("select * from hotel where name = #{name}")
    Hotel selectByName(String name);

    /**
     * 添加酒店
     * @param hotel
     */
    void insert(Hotel hotel);

    /**
     * 批量删除酒店
     * @param ids
     */
    void deleteByIds(List<Integer> ids);

    /**
     * 更新酒店状态
     * @param id
     * @param status
     */
    @Update("update hotel set status = #{status} where id = #{id}")
    void updateStatus(int id, int status);

    /**
     * 更新酒店
     * @param hotel
     */
    void update(Hotel hotel);

    /**
     * 分页查询酒店规格
     * @param hotelSpecsPageQueryDTO
     * @return
     */
    Page<HotelSpecsPageQueryVO> pageQuerySpecs(HotelSpecsPageQueryDTO hotelSpecsPageQueryDTO);

    /**
     * 根据酒店规格名称查询
     * @param name
     * @return
     */
    @Select("select * from hotel_specs where name = #{name} and hotel_id = #{hotelId}")
    HotelSpecs selectSpecsByNameAndHotelId(String name, int hotelId);

    /**
     * 添加酒店规格
     * @param hotelSpecs
     */
    void insertHotelSpecs(HotelSpecs hotelSpecs);

    /**
     * 更新酒店规格
     * @param hotelSpecs
     */
    void updateSpecs(HotelSpecs hotelSpecs);

    /**
     * 根据酒店id删除酒店规格
     * @param ids
     */
    void deleteSpecsByIds(List<Integer> ids);

    /**
     * 根据酒店id删除酒店规格
     * @param ids
     */
    void deleteHotelSpecsByIds(List<Integer> ids);

    /**
     * 高级查询
     * @param hotelPageQueryDTO
     * @return
     */
    Page<HotelAdvancedPageQueryVO> advancedPageQuery(HotelPageQueryDTO hotelPageQueryDTO);

    /**
     * 查询所有酒店
     * @return
     */
    @Select("select * from hotel")
    List<Hotel> selectAll();

    /**
     * 根据id查询酒店
     * @param id
     * @return
     */
    @Select("select * from hotel where id = #{id}")
    Hotel selectById(int id);

    /**
     * 根据酒店规格id查询酒店规格
     * @param hotelSpecsId
     * @return
     */
    @Select("select * from hotel_specs where id = #{hotelSpecsId}")
    HotelSpecs selectSpecsByHotelSpecsId(int hotelSpecsId);
}
